package com.zm.oes.controller;

import com.zm.oes.entity.Admin;
import com.zm.oes.entity.ApiResult;
import com.zm.oes.serviceimpl.AdminServiceImpl;
import com.zm.oes.util.ApiResultHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
public class AdminController {

    private AdminServiceImpl adminService;

    /**
     * 通过构造函数注入了一个 AdminServiceImpl 实例，用于处理与管理员相关的业务逻辑
     */
    @Autowired
    public AdminController(AdminServiceImpl adminService){
        this.adminService = adminService;
    }

    /**
     * 处理 HTTP GET 请求的方法，当访问路径为 /admins 时调用
     * 调用 adminService 的 findAll 方法来获取所有管理员信息，并将结果包装成一个 ApiResult 对象返回
     */
    @GetMapping("/admins")
    public ApiResult findAll(){
        System.out.println("查询全部");
        return ApiResultHandler.success(adminService.findAll());
    }

    /**
     * 处理 HTTP GET 请求的方法，当访问路径为 /admin/{adminId} 时调用，其中 {adminId} 是一个占位符，用于接收管理员ID参数
     * 调用 adminService 的 findById 方法根据管理员ID查找管理员信息，并将结果包装成一个 ApiResult 对象返回
     */
    @GetMapping("/admin/{adminId}")
    public ApiResult findById(@PathVariable("adminId") Integer adminId){
        System.out.println("根据ID查找");
        return ApiResultHandler.success(adminService.findById(adminId));
    }

    /**
     * 调用 adminService 的 deleteById 方法根据管理员ID删除管理员信息，并返回一个表示删除成功的 ApiResult 对象
     */
    @DeleteMapping("/admin/{adminId}")
    public ApiResult deleteById(@PathVariable("adminId") Integer adminId){
        adminService.deleteById(adminId);
        return ApiResultHandler.success();
    }

    /**
     * 调用 adminService 的 update 方法更新管理员信息，并返回一个表示更新成功的 ApiResult 对象
     */
    @PutMapping("/admin/{adminId}")
    public ApiResult update(@PathVariable("adminId") Integer adminId, Admin admin){
        return ApiResultHandler.success(adminService.update(admin));
    }

    /**
     * 用 adminService 的 add 方法添加新的管理员信息，并返回一个表示添加成功的 ApiResult 对象
     */
    @PostMapping("/admin")
    public ApiResult add(Admin admin){
        return ApiResultHandler.success(adminService.add(admin));
    }

    /**
     * 用于接收管理员ID、旧密码和新密码
     * @PathVariable("adminId") 表示将路径中的 adminId 参数绑定到方法的 adminId 参数上，类型为 Integer
     * @PathVariable("oldPsw") 和 @PathVariable("newPsw") 分别将路径中的 oldPsw 和 newPsw 参数绑定到方法的 oldPsw 和 newPsw 参数上，类型分别为 String
     */
    @GetMapping("/admin/resetPsw/{adminId}/{oldPsw}/{newPsw}")
    //方法体内部调用了 adminService 的 resetPsw 方法，并将接收到的管理员ID、旧密码和新密码作为参数传递给该方法
    public ApiResult resetPsw(@PathVariable("adminId") Integer adminId, @PathVariable("newPsw") String newPsw, @PathVariable("oldPsw") String oldPsw) {
        return ApiResultHandler.success(adminService.resetPsw(adminId, newPsw, oldPsw));
    }
}
